#ifndef _JEU_H
#define _JEU_H
#include "Tank.h"
#include "TabDynEnnemi.h"
#include "TabDynTir.h"
#include "Niveau.h"

struct sJeu
{
   Tank jeu_tank;/**@brief le tank principale du tank */
   Terrain jeu_terrain;/**@brief le terrain du jeu*/
   TabDynEnnemi jeu_tabennemi;/**@brief le tableaudynamique d'ennemi */
   unsigned int jeu_nbennemi;/**@brief le nombre d'ennemi du jeu en cour */
   Tir jeu_tirtank;/**@brief le tir du tank */
   TabDynTir jeu_tabtirennemi;/**@brief le tableaudynamique du tir des ennemis */
   unsigned int jeu_nbennemitotale;
   unsigned int jeu_nbtirennemi;
   unsigned int jeu_niveau;
   unsigned int jeu_score;
   unsigned int jeu_bonus;
   unsigned int jeu_xbonus;
   unsigned int jeu_ybonus;
   int jeu_cle;
   int jeu_xcle;
   int jeu_ycle;
};
typedef struct sJeu Jeu;

/**@brief Procedure jeuInit:
  <B> jeuInit prend le terrain par defaut et l'initialise,initialise le tank
,le tir et alloue dans le tas un tableau d'ennemi et
initialise chacun des énnemis du tableau en les atribuant une position
aleatoire  </B> */
void jeuInit(Jeu* ,int );

/**@brief Procedure jeuLibere:
<B> jeuLibere libere le terrain,le tableau d'ennemi </B> */
void jeuLibere(Jeu* );

/**@brief jeuGetNbEnnemi:->entier
   <B> jeuGetNbEnnemi recupere le nombre d'ennemi actuel
   du jeu</B>*/
int jeuGetNbEnnemi(const Jeu* );

int jeuGetAbscisseBonus(const Jeu* );

int jeuGetOrdonneeBonus(const Jeu* );

int jeuGetAbscisseCle(const Jeu* );

int jeuGetOrdonneeCle(const Jeu* );

/**@brief jeuGetNiveau:->entier
<B>jeuGetNiveau permet de recuperer le niveau actuelle du jeu </B> */
int jeuGetNiveau(const Jeu* );

int jeuGetScore(const Jeu* );

/**@brief jeuGetConsTir:->'Tir'
<B> jeuGetConsTir recupere le tir du tank dans le jeu actuel </B> */
const Tir* jeuGetConstTir(const Jeu* );

/**@brief jeuGetTank:->'Tank'
<B> jeuGetT recupere le tank du jeu actuelle </B> */
const Tank* jeuGetTank(const Jeu* );

/**@brief jeuGetTank:->'Terrain'
<B>jeuGetTerrain recupere le terrain actuel du jeu </B> */
const Terrain* jeuGetTerrain(const Jeu* );

/**@brief jeuActionClavier:
<B>jeuActionClavier attribue une action au tank du jeu actuel en fonction
de la touche tapper </B> */
void jeuActionClavier(Jeu* ,const char );

/**@brief Procedure jeuEvolue:
<B>jeuEvolue gere l'evolution du jeu,elle deplace tous les ennemis
de maniere aleatoire,la gestion des collision,la destruction des murs... </B> */
void jeuEvolue(Jeu* );

void jeuTestRegression();

#endif
